package etapaObra;

import java.util.List;

import obra.Obra;

import org.hibernate.Query;
import org.hibernate.Session;

import construtora.Construtora;


public class EtapaObraDAOHibernate implements EtapaObraDAO{

	private Session	session;

	public void setSession(Session session) {
		this.session = session;
	}

	public void salvar(EtapaObra etapaObra) {
		this.session.save(etapaObra);
	}

	public void atualizar(EtapaObra etapaObra) {

		this.session.merge(etapaObra);
	}

	public void excluir(EtapaObra etapaObra) {
		this.session.delete(etapaObra);
	}

	public EtapaObra carregar(Integer codigo) {
		//TODO o hibernate nao conseguira fazer a carga caso seja passado o EtapaObra
		// no parametro, tem que ser diretamente a chave (integer)
		return (EtapaObra) this.session.get(EtapaObra.class, codigo);
	}


	@SuppressWarnings("unchecked")
	public List<EtapaObra> listar() {
		return this.session.createCriteria(EtapaObra.class).list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EtapaObra> listarEtapaObrasConstrutora(Construtora construtora) {
		String hql = "select o from EtapaObra o where o.construtora = :construtora";
		Query consulta = this.session.createQuery(hql); 
		consulta.setEntity("construtora", construtora);

		//TODO mostrar primeiramente com o list e depois apresentar o uniqueResult
		List<EtapaObra> etapaObras = consulta.list();
		return etapaObras;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EtapaObra> listarUltimasEtapasObra(Obra obra) {
		String hql = "select e " +
				"from EtapaObra e " +
				"where e.obra = :obra " +
				"order by e.data desc";
		Query consulta = this.session.createQuery(hql); 
		consulta.setEntity("obra", obra);
		
		List<EtapaObra> etapaObras = consulta.list();
		
		return etapaObras;
	}


}
